package com.itheima.controller;

import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController//标识为controller实现类 --交给springIOC管理 @RestController = @Controller + @ResponseBody
@RequestMapping("/depts")//公共路径
@Slf4j
public class DeptController {

    @Autowired //从springIOC容器中获取对象
    private DeptService deptService;

    //设计每个处理方法--设计处理器--如何完成接收请求 处理响应。
    @GetMapping
    public Result list(){
       //调用service
        List<Dept> deptList = deptService.queryDeptList();
        //数据放到 Result中
        return Result.success(deptList);
    }

    //根据id删除指定 部门信息  请求方式 delete 请求路径 /depts 请求参数 ?id=1
    // 参数接收方式一  用HttpServletRequest对象 太繁琐
    //       方式二  使用注解 @RequestParam("参数名") 形参
    //       方式三  上述简化写法 形参  类型  参数名  (形参参数名和请求参数名保持一致)
    @DeleteMapping
    public Result delete( Integer id){
        System.out.println("删除的部门id是:"+id);
        //将id传递给service 由service完成
        deptService.delete(id);//爆红因为没有这个方法 idea alt+enter 自动生成
        //返回结果
        return Result.success();
    }


    /*
      完成 新增部门功能
        请求方式 post 请求路径 /depts  请求参数 请求体里面的  {"name":"开发部"}

        前端 json格式 对应 java的实体类型  找一下可以接收 name属性的实体类型 Dept
        参数直接写 实体类型
           Dept dept  因为直接写表示接收的是 ?后面的参数
        在请求体怎么处理呢？
          @RequestBody 注解 表示接收请求体里面的参数
            作用  将请求体中json格式数据转换成 实体对象
     */
    @PostMapping
    public Result add(@RequestBody Dept dept){//参数该怎么表达呢？

        System.out.println("新增部门:"+dept);
        // 调用service完成新增
        deptService.add(dept);

        return Result.success();
    }

    /*
     根据id查询部门
        请求方式 get  请求路径  /depts/1   请求参数 在路径上
         设计 @GetMappint("/depts/{路径变量}")
         参数位置接收:
             @PathVariable("路径变量名") 形参类型  形参名
         上述是标准写法 如果说 定义路径变量名和形参名一致 可以省略路径变量名
     */
    @GetMapping("/{id}")
//    public Result getById(@PathVariable("id") Integer deptId){
    public Result getById(@PathVariable Integer id){
        System.out.println("根据id查询部门:"+id);
        log.info("根据id查询部门:"+id);
        //调用service 因为根据id查询 一条 一个对象接收
        Dept dept = deptService.getById(id);
        //聪明的86期小朋友 别忘了回显数据
        return Result.success(dept);
    }
    /*
     修改部门信息
       请求方式 put 请求路径 /depts 请求参数 请求体里面的 {"id":1,"name":"开发部"}
       请求参数json 怎么接收  @RequestBody 实体类型 对象名
     */
    @PutMapping
    public Result update(@RequestBody Dept dept){
        System.out.println("修改的部门信息:"+dept);
        log.info("修改的部门信息:"+dept);
        //调用service完成修改
        deptService.update(dept);
        //返回结果
        return Result.success();
    }


}
